package com.hedl.practice.diyJava.multithreading.create_thread.test;

public class Study_3 {

    /**
     * 我们再来看线程的执行顺序：
     *      main线程肯定是先打印main start，再打印main end；
     *      t线程肯定是先打印thread run，再打印thread end。
     * 但是，除了可以肯定，main start会先打印外，main end打印在thread run之前、thread end之后或者之间，都无法确定
     * 线程中调用Thread.sleep()，强迫当前线程暂停一段时间：
     * @param args
     */
    public static void main(String[] args) {
        System.out.println("main start...");
        Thread t = new Thread(){
            @Override
            public void run(){
                System.out.println("Thread run...");
                try {
                    Thread.sleep(10);       //暂停10毫秒
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }finally {
                    System.out.println("Thread end.");
                }
            }
        };
        t.start();
        try {
            Thread.sleep(20);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }finally {
            System.out.println("main end...");
        }
    }
}
/**
 * 最终的输出结果：
 *      main start...
 *      Thread run...
 *      Thread end.
 *      main end...
 */

/**
 * 小结：
 *      Java用Thread对象表示一个线程，通过调用start()启动一个新线程；
 *      一个线程对象只能调用一次start()方法；
 *      线程的执行代码写在run()方法中；
 *      线程调度由操作系统决定，程序本身无法决定调度顺序；
 *      Thread.sleep()可以把当前线程暂停一段时间。
 */